The present invention relates to digital communication systems and more particularly to digital communication systems that use multiple levels of encoding to protect user data as it passes through a noisy communications channel.
Digital communication systems are designed to transmit user data from a source to a destination. The means connecting the source and destination can be a simple conducting wire, a global satellite system or a magnetic storage system. The connecting means is often generalized as a channel between the source and destination.
All channels occasionally introduce electronic noise into the signals they carry. This electronic noise changes the digital signal and thus creates errors within the digital signal. To protect the digital signals as they pass through the channel, encoding and decoding systems have been developed that add additional bits to the digital signal so that the original signal may be recovered even if the channel introduces errors. In some communication systems, multiple levels of encoding are used, meaning that the original digital signal is encoded more than once before being passed through the channel.
An example of a multiple-level encoding system is found in the encoding system used in some magnetic storage devices. In these systems, the user data is first encoded using an error correction code (ECC) and then further encoded using some form of trellis code. In the ECC encoding process, the user data is typically broken into bytes of digital values where each byte represents one unit of user data. For example, user data may be grouped together in blocks containing 175 bytes of user data and 5 bytes of ECC redundancy. The 5 bytes of ECC redundancy are chosen based on the digital values found in the 175 user bytes. Typically, 5 bytes of ECC redundancy can correct up to two erroneous user bytes in each block. The ECC encoding system is completed by interleaving three separate blocks in a sector containing 540 bytes, so that the complete set of user bytes and ECC bytes for any one block can be found by sampling every third byte of the interleaved output.
Interleaving reduces the effects of burst errors on the ECC encoded signal. Burst errors are localized error events affecting one or more consecutive user words. By ensuring that consecutive words in the ECC encoded signal are not from the same block, interleaving reduces the chance that a burst error will affect more than one byte in a block. Since ECC can only correct two user bytes per block, interleaving reduces the chances that a burst error will exceed the maximum number of user bytes that ECC can correct.
In prior art coding methods for magnetic storage devices, the interleaved ECC encoded values are further encoded by two parallel trellis encoders. Each of the two parallel trellis encoders typically produces a spectral null code, also referred to as a DC free or DC null code, whose encoded data stream has a spectral null at zero frequency. The outputs of the two trellis encoders are interleaved together to create a signal that has both a DC null and a null at the Nyquist frequency, i.e., at half the channel bit frequency. Input signals that have a spectral null at D.C. and the Nyquist frequency are preferred because they match the spectral response of a disc drive channel equalized to class-IV partial response (PR4), and this improves the destination's ability to recover encoded signals from the channel.
In the prior art, the interleaved ECC encoded values are assigned to the parallel trellis encoders by first assigning the even bytes to one trellis encoder and the odd bytes to the other trellis encoder. Each trellis encoder then uses 12 bits at a time from the stream of bytes assigned to it to create codewords. This means that each trellis encoder uses one full byte and one half byte of the ECC encoded bytes to create one codeword. Thus, the odd byte trellis encoder uses all of byte 1 and half of byte 3 of the ECC encoded bytes to make a first odd stream codeword and the other half of byte 3 and all of byte 5 to make a second odd stream codeword. Likewise, the even byte trellis encoder uses all of byte 0 and half of byte 2 to make a first even stream codeword.
The codewords produced by each trellis encoder are created in parallel so that the bits of the two parallel codewords may be interleaved at the encoder's outputs. The series of interleaved codewords passes through the channel where it is occasionally corrupted by burst errors. The burst errors usually affect two or more consecutive bits and, because of the interleaving, corrupt two or more codewords.
After the channel, a deinterleaver reconstitutes the codewords and sends the individual codewords to detectors to be decoded into approximations of the ECC encoded signal. Since each pair of interleaved codewords is constructed from four bytes of ECC encoded data, the corruption of a pair of interleaved codewords by a burst error results in the corruption of four bytes of data. For example, one corrupted codeword may corrupt bytes 1 and 3 and the other corrupted codeword may corrupt bytes 0 and 2. The fact that a single burst error can corrupt four separate bytes is significant because the ECC encoded signal is created using a three-way interleave. Every third byte of the ECC encoded signal is from a single block of ECC encoded information. Thus, in the example above, corrupted bytes 0 and 3 are from the same block. This means that one burst error can corrupt two bytes from the same block. Because ECC can only correct two erroneous bytes in a block, this one burst error has consumed the ECC's entire ability to correct corrupted data. If two burst errors occur, corrupting a total of four codewords, the ECC decoder will not be able to correct the corrupted data because more than two bytes of ECC encoded data will be corrupted in a single ECC block.